package dao;

import java.io.Serializable;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;

public class DAO<T,IDType extends Number> implements Serializable{
    private final EntityManager gerente;
    private final Class<T> classe;

    public DAO(EntityManager em, Class<T> classe) {
        this.gerente = em;
        this.classe = classe;
    }
    
    public void inserir(T t){
        gerente.persist(t);
    }
    
    public T atualizar(T t) {
        return gerente.merge(t);
    }
    
    public void excluir(T t){
        gerente.remove(t);
    }
    
    public T consultar (IDType id){
        return gerente.getReference(classe,id);       
    }
    
    public List<T> listar(){
        Query consulta = gerente.createQuery("from "+classe.getName());
        return consulta.getResultList();       
    }
    
    public String adicionarCondicao(String completa, String add) {

        if (completa.contains("where")) {

            return completa + " and " + add;

        }

        return completa + " where " + add;
    }
    
}
